import requests
import akshare as ak
import os
# 获取A股所有股票的代码
def find_stock_code(stock_name):
    # 使用stock_info_a_code_name()，反馈数据格式详细参见akshare官网
    StockList = ak.stock_info_a_code_name()
    # print(StockList)
    # 初始化股票代码
    stock_code = None

    # 遍历股票列表
    for i in range(len(StockList)):
        # 获取股票名称 从 DataFrame StockList 中取出第 i 行第二列的数据
        current_stock_name = StockList.iloc[i, 1]

        # 如果输入的股票名字与列表中的股票名称匹配，则获取对应的股票代码
        if current_stock_name == stock_name:
            stock_code = StockList.iloc[i, 0]
            break
    # StockList返回的股票代码是“000001”，“000002”这样的格式
    # 但是stock_zh_a_daily（）函数中，要求代码的格式为“sz000001”，或“sh600001”
    # 即必须有sz或者sh作为前序
    # 因此，通过for循环对股票代码code进行格式变换
    for i in range(0, len(StockList)):
        temp = StockList.iloc[i, 0]
        if temp[0] == "6":
            temp = "sh" + temp
        if temp[0] == "0":
            temp = "sz" + temp
        if temp[0] == "3":
            temp = "sz" + temp
        StockList.iloc[i, 0] = temp
    # 下面这几行代码注释是因为每次都要写入txt文件，时间开销太大
    # 通过txt形式保存数据，先检测是否存在文件。
    # 若存在，则在更新股票列表时，先将原有文件删除，再重建文件。
    if os.path.exists("StockList/stockList.txt"):
          os.remove("StockList/stockList.txt")
    # 将原有表格删除后，更新原有数据
    StockList.to_csv("StockList/stockList.txt", sep="\t", index=False, header=True)

    # 如果找到对应的股票代码，则进行格式转换并保存到文件中
    if stock_code:
        if stock_code[0] == "6":
            stock_code = "sh" + stock_code
        else:
            stock_code = "sz" + stock_code

        # 保存到文件中
        # with open("python/StockList/stockList.txt", "w") as f:
        #     f.write(f"{stock_name}\t{stock_code}")
        # print(stock_code)
        return stock_code
    else:
        return f"未找到股票名称为'{stock_name}'的股票代码。"


def fetch_stock_data(stock_code):
    # 以上证指数为例
    # stock_code = 'sz000001'
    # 发送GET请求,stock_code是股票代码
    url = f"http://hq.sinajs.cn/list={stock_code}"
    headers = {'Referer': 'https://finance.sina.com.cn/'}
    response = requests.get(url, headers=headers)
    print(response)
    if response.status_code == 200:
        try:
            stock_data = response.text
            # print(stock_data)
            # 爬取到数据信息
            mt_info = stock_data.split(',')
            # 股票名字
            name = mt_info[0].split('"')[1]
            # 股票代码
            # print(mt_info[0].split('"')[0])
            number = mt_info[0].split('"')[0].split('_')[2].split('=')[0]
            # 股票今日开盘价
            today_price = float(mt_info[1])
            # 股票昨日收盘价
            yesterday_price = float(mt_info[2])
            # 股票当前价格
            price = float(mt_info[3])
            # 交易时间
            trade_datetime = mt_info[30] + ' ' + mt_info[31]
            # 把上面的各种信息拼接成一个大字符串
            tick = '股票名称：'+name+'\n'+'股票代码：'+number+'\n'+'股票今日开盘价：'+str(today_price)+'\n'+'股票昨日收盘价：'+str(yesterday_price)+'\n'+'股票当前价格：'+str(price)+'\n'+'交易时间：'+trade_datetime
            return tick
        except:
            return "请求繁忙"
    else:
        return "无法获取股票数据"
